# !/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
===========================
@Time : 2022/8/25 0025 0:00
@Author : 测试开发工程师
@File : 9. swageer.demo2.py
@Software: PyCharm
============================
"""

from flask import Flask, request
from flask_restx import Resource, Api, Namespace, fields
from werkzeug.datastructures import FileStorage
from apitest.Test_frame.utils.log_utils import logger

app = Flask(__name__)

# 配置版本号
api = Api(app, version="2.0")

hello_ns = Namespace('demo', description='demo学习')


@hello_ns.route("")
class Demo(Resource):
    # get 的 args 格式
    # 定义 parser 解析器对象
    get_parser = api.parser()
    # 通过 Parser 解析器对象添加测试参数  name是 int类型，required=True，为必填项
    get_parser.add_argument('id', type=int, location="args", required=True)
    get_parser.add_argument('case_title', type=str, location="args", required=True)

    # location 要与 request对象属性一一对应
    @hello_ns.expect(get_parser)
    def get(self):
        logger.info(f'request.args->{request.args}')
        return {'code': 0, 'msg': 'get success'}



    # post
    # 定义 parser 解析器对象
    post_parser = api.parser()

    # post 的 json 格式
    # 通过 Parser 解析器对象添加测试参数  id 是 int类型，required=True，为必填项
    post_parser.add_argument('id', type=int, location="json", required=True)
    post_parser.add_argument('casetitle', type=str, location="json", required=True)

    @hello_ns.expect(post_parser)
    def post(self):
        logger.info(f'request.json->{request.json}')
        return {'code': 0, 'msg': 'post success'}



    # post 的 file 格式
    # 通过 Parser 解析器对象添加测试参数
    post_parser.add_argument('file', type=FileStorage, location="files",required=True)

    @hello_ns.expect(post_parser)
    def post(self):
        logger.info(f'request.file->{request.files}')
        return {'code': 0, 'msg': 'post success'}



    # post 的 form 表单格式
    # 通过 Parser 解析器对象添加测试参数  id 是 int类型，required=True，为必填项
    post_parser.add_argument('param1', help="username", type=str, location="form", required=True)
    post_parser.add_argument('param2', help="password", type=int, location="form", required=True)

    @hello_ns.expect(post_parser)
    def post(self):
        logger.info(f'request.form->{request.form}')
        return {'code': 0, 'msg': 'post success'}



    # post 的 choice 枚举格式
    # 通过 Parser 解析器对象添加测试参数  id 是 int类型，required=True，为必填项
    post_parser.add_argument('choice', choices=('one', "two"), location="args", required=True)

    @hello_ns.expect(post_parser)
    def post(self):
        logger.info(f'request.args->{request.args}')
        return {'code': 0, 'msg': 'post success'}


api.add_namespace(hello_ns, '/hello')

if __name__ == '__main__':
    app.run(debug=True)
